<?php
namespace app\mogo\home;

use app\mogo\model\Comments as CommentsModel; // 与控制器同名 重命名
use app\mogo\model\Message;
use app\mogo\model\User;

class Comments extends Base {
    // 获取列表
    public function index($row=10,$guid=null){
        // 查询字段
        $map = $this->getMap();
        $Post = new CommentsModel();
        // 判断参数
        if(!$guid) return mogo_error('缺少参数 guid');
        $data =  $Post
            ->order('id desc')
            ->where($map)
            ->with('user,comments.user')
            ->where('object_guid',$guid)
            ->paginate($row)
            ->each(function($item){
                $comment_item = CommentsModel::get($item['id']);
                $item['is_like'] = $comment_item->checkIsLike();
            });
        return json($data);
    }
    // 保存内容
    public function save(){
        // 第一步 过滤字段
        $data = request()->only(['content','object_guid','object_type','comments_id','at_id']);
        // 第二部 验证字段
        $result = $this->validate($data,'Comments');
        if(true!==$result){
            return mogo_error($result,['ec'=>'ggg']);
        }
        if(isset($data['comments_id'])){
            $comment = CommentsModel::get($data['comments_id']);
            if(!$comment) return mogo_error('上级评论不存在');
        }else{
            if(!$data['object_guid']) return mogo_error('object_id 不能为空');
        }
        // 第三部 存储字段
        $res = CommentsModel::create($data);
        // 第四部 通知被回复用户
        if(!empty($data['at_id'])){
            $at_user = User::get($data['at_id']);
            if(!$at_user) return mogo_error('被通知用户不存在');
            $msg = [
                'user_id'=>$data['at_id'], // 被通知的人
                'content'=>$data['content'], //通知内容
                'at_id'=>mogo_get_user_id(), // 谁at的
                // 额外信息 比如图片 跳转链接
                'extra'=>[
                    'type'=>'comments',
                    'comments_id'=>$res['id'],
                ],
            ];
            Message::push_message($msg);
        }
        return json($res);
    }
    // 获取评论
    public function read($id,$row=10){
        $data = CommentsModel::with('comments.user,user')
            ->withCount('like')
            ->order('id desc')
            ->where(['object_guid'=>$id])
            ->paginate($row)->each(function($item){
                $comment_item = CommentsModel::get($item['id']);
                $item['is_like'] = $comment_item->checkIsLike();
            });
        // 第一步 验存
        if(!$data) return mogo_error('帖子不存在');
        // 这里可以做一些处理
        return json($data);
    }
    // 删除内容
    public function delete($id){
        $data = CommentsModel::get($id);
        // 第一步 验存
        if(!$data) return mogo_error('帖子不存在');
        // 第二部 验证权限
        if($data['user_id']!==mogo_get_user_id()) return mogo_error('没有权限');
        // 第三部 返回处理结果,便于调试
        $res=[
           'result'=> $data->delete(),
        ];
        return json($res);
    }

    // 获取自己发布的评论
    public function my($row=15){
        // 查询字段
        $map = $this->getMap();
        $Post = new CommentsModel();
        // 判断参数
        $data =  $Post
            ->order('id desc')
            ->where($map)
            ->with('user,comments.user')
            ->where('user_id',mogo_get_user_id())
            ->paginate($row)
            ->each(function($item){
                $comment_item = CommentsModel::get($item['id']);
                $item['is_like'] = $comment_item->checkIsLike();
            });
        return json($data);
    }

    // 评论点赞
    public function like($id){
        $data = CommentsModel::get($id);
        // 第一步 验存
        if(!$data) return mogo_error('帖子不存在');
        // 检查是否已经点赞

        if($data->checkIsLike()) {
            $res = [
                'detach_result'=>$data->like()->detach(mogo_get_user_id())
            ];
        }else{
            $res =  $data->like()->attach(mogo_get_user_id(),['create_time'=>time()]);
        }
        return json($res);
    }

}